3.6.12.12 bfe,bfn-ブロックフロート化命令
行列ベクトル積和演算の積の部分に対する入力はすべて、その演算精度に対応するブロックフロート(BF)化命令でBF化を行っておかなければならない。
これはおおまかには、内積回路の 2 入力のそれぞれの中で指数部の値を揃えておく操作である。
このため、BF化命令は他のALU命令と異なり、要素ごとに独立な演算ではない。
オペコードの文法は次の通りである。
code:オペコードの文法
dbfn
|fbfn
|gbfn
|hbfn/<n>
|hbfe/<n>
先頭のd, f, g, hはそれぞれ倍精度、単精度、疑似単精度、半精度を表す。
内積回路のサイズは倍精度と単精度では 4 語、疑似単精度では 8 語、半精度では 16 語なので、BF化もこれらの語数ごとに行われる。
この単位を本節ではブロックと呼ぶ。
倍精度では、各PEのMSB側 1 長語からなる 1 ブロックに対してBF化を行う。
単精度では、各PEのMSB側 1 長語の、さらにMSB側 1 単語からなるブロックと、LSB側 1 単語からなるブロックの 2 ブロックに分けてBF化を行う。
単精度MAU演算ではMSB側単語を利用するため、LSB側単語を演算に利用するときはLM等に書き込んだのち単語で読み出すなどする。
疑似単精度では、各PEのMSB側 1 長語からなる 1 ブロックに対してBF化を行う。
半精度BF化命令はhbfnとhbfeのいずれも、サイクルあたり各PEから 2 長語を読み出して計 32 半精度語を入力とする。
各PEのMSB側 1 長語からなるブロックと、LSB側 1 長語からなるブロックの 2 ブロックに分けてBF化を行う。
以上のように、BF化のPEあたりでのスループットは、半精度以外では 1 長語/サイクル、半精度では 2 長語/サイクルである。
hbfeはブロックの中で相対的に指数部が小さい数について、通常の浮動小数点数フォーマットで言う非正規化数に近い表現を用いてアンダーフローを防ぐ処理を行う。
これを拡張表現と呼ぶ。
hbfnのときは拡張表現を用いない。
<n>は 6 から 9 までの整数で変換後の仮数部長を指定する。
<n>を小さくすると、演算精度が低下する代わりに電力消費量の低減が期待される。
半精度以外では拡張表現や仮数部長指定機能は存在しない。